package com.wxm.killing.mq.common.swagger;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * Created by pact on 2018/7/3.
 */
@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Autowired
    SwaggerProperties swaggerProperties;

    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                //  在Docket创建中，通过groupName进行分组，paths属性进行过滤，apis属性可以设置扫描包，或者通过注解的方式标识；通过enable属性，
                .groupName("测试")
                // 可以在application-{profile}.properties文件中设置相应值，主要用于控制生产环境不生成接口文档。
                // 是否开启
                .enable(swaggerProperties.isEnable())
                .select()
                // 需要扫描的包路径
                .apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage()))
                // 指定路径处理PathSelectors.any()代表所有的路径
                .paths(PathSelectors.any())
                .build();
        //.directModelSubstitute(org.joda.time.LocalDate.class, java.sql.Date.class)
        //.directModelSubstitute(DateTime.class, java.util.Date.class)
    }

    /**
     * 接口文档的基本说明信息
     * @return
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                // 文档标题
                .title(swaggerProperties.getTitle())
                // 文档描述信息
                .description(swaggerProperties.getDescription())
                // 协议及协议地址
                .license("Apache 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html")
                // 团队支持
                .termsOfServiceUrl(swaggerProperties.getTermsOfServiceUrl())
                // 问题联系人
                .contact(new Contact(swaggerProperties.getContactName(),"", swaggerProperties.getContactEmail()))
                .version(swaggerProperties.getVersion())
                .build();
    }
}
